package java6703.copy;
import java.io.*;
import java.util.Scanner;

        /*
        主方法：
        （1）接收从键盘输入源文件和目标文件;
        （2）调用Result6703()方法检查目标文件是否可用;
        （3）调用copy6703()方法完成文件复制;
        （4）输出拷贝的字节数和所用的时间;
         */

public class CopyFile6703 {
    public static void main(String[] args) throws Exception {

        // 输入要拷贝的源文件名
        Scanner input = new Scanner(System.in);
        System.out.print("请输入要拷贝的源文件名：");

        String source = input.nextLine();

        // 输入目标文件名
        System.out.print("请输入目标文件名：");

        String target = input.nextLine();

        boolean check = Result6703(source, target);

        //开始时间
        long startTime = System.currentTimeMillis();

        //返回文件字节数
        long num = 0;
        if (check) {
            num = copy6703(source, target);
        }

        //计算拷贝文件所用的时长
        long overTime = System.currentTimeMillis();

        //输出拷贝文件的字节数和用时
        System.out.println("拷贝" + num + "字节，用时：" + (overTime - startTime) + "毫秒");
    }

    private static boolean Result6703(String sourceName, String targetName) {

        File file = new File(sourceName);

        if (!file.exists()) {

            //获取路径
            File parent = file.getParentFile();

            //判断是否存在
            if (parent != null && !parent.exists()) {
                if (!parent.mkdirs()) {
                    try {
                        throw new IOException("该目录已存在：" + parent);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return false;
            }
        }
        File parent = new File(targetName).getParentFile();

        //判断是否存在
        if (parent != null && !parent.exists()) {
            if (!parent.mkdirs()) {
                try {
                    throw new IOException("该目录已存在：" + parent);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return false;
        }
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }

    private static long copy6703(String sourceName, String targetName) {
        long width = 0;

        try (
                //创建带缓冲的输入流
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceName));
                //创建带缓冲的输出流
                BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(targetName))) {

            // 定义数组
            byte[] buff = new byte[1024];

            int length = 0;

            //循环
            while ((length = bis.read(buff)) != -1) {

                //把buff中的内容写入到输出流
                bos.write(buff, 0, length);

                width += length;
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return width;
    }
}